.. :validated: 3.1.0

Рекомендации по настройке hostname & fqdn
-----------------------------------------

Введение
~~~~~~~~~~~~~~~~~~~~~~~~~~

Компьютеры в домене используют FQDN-имена (полные доменные имена), поэтому администраторам крайне важно понимать механизм их формирования. В операционных системах Linux для получения ответа на этот вопрос используется информация сразу из нескольких источников.

Рекомендации
~~~~~~~~~~~~~~~~~~~~~~~~~~

Утилита **hostname** без параметров возвращает локальное имя машины из файла виртуальной системы ядра ``/proc/sys/kernel/hostname``. Есть также файл ``/etc/hostname``, который позволяет менять имя, но изменения вступают в силу только после перезагрузки. Можно поменять имя хоста без перезагрузки, используя утилиту ``hostnamectl set-hostname``.

При использовании дистрибутивов Debian рекомендуется в качестве имени хоста устанавливать короткое имя, например, «pc-1», а не полное доменное имя FQDN, например, «pc-1.ald.company.local». В этом случае при вызове утилиты ``hostname`` без параметров будет отображаться значение «pc-1». Но можно в качестве имени хоста установить и полное имя FQDN, т. е. «pc-1.ald.company.local», тогда очевидно, что вызов ``hostname`` без параметров будет уже выдавать «pc-1.ald.company.local», а не «pc-1». Разница проявит себя в тех ситуациях, где используется имя хоста, например:

1) Утилита ``hostname`` с ключом ``-f`` в соответствии с настройками ``/etc/nsswitch.conf`` сначала ищет FQDN хоста по файлу ``/etc/hosts``, который содержит строки вида:

.. code-block:: bash

   IP-адрес каноническое_имя_узла [псевдонимы…]

При выполнении алгоритма локальное имя хоста используется для поиска соответствующей строки в файле ``/etc/hosts``. Если совпадение найдено, в качестве FQDN хоста используется каноническое имя, указанное в этой строке.

Если в качестве hostname будет выступать FQDN, то поиск сработает, но не по псевдониму из строки, а по каноническому имени узла.

2) Если в файле ``hosts`` искомая запись не найдена, то в соответствии с настройками ``/etc/nsswitch.conf`` выполняется поиск хоста по DNS. Так как имя ``hostname``, например, «pc-1», не содержит точек (см. параметр ``ndots``), то к нему добавляется суффикс ``search`` из файла ``/etc/resolv.conf``, например, «ald.company.local». В результате формируется полное имя FQDN «pc-1.ald.company.local». Для сформированного FQDN система запрашивает A- и AAAA-записи у DNS-сервера. Если DNS-сервер вернет какую-нибудь запись, даже с IP-адресом, который не назначен ни одному из интерфейсов этого компьютера, то этот FQDN будет считаться валидным.

При вводе машины в домен инструментами **ALD Pro** именем хоста устанавливается FQDN. При вводе в домен ванильного Debian с помощью ванильного **FreeIPA**-клиента поведение продукта в части ``hostname`` аналогичное — именем хоста устанавливается FQDN машины. Такой подход принят в **Red Hat**, и он наследуется при использовании **FreeIPA**, т. к. она сейчас разрабатывается как **upstream Red Hat IdM**.

При данном подходе вызов команды ``hostname`` без параметров будет выдавать FQDN хоста. Для серверов будет правильно указать в файле ``/etc/hosts`` строку, которая будет соответствовать этому FQDN, чтобы ``hostname -f`` работал без обращения к DNS, это и быстрее, и надежнее.

На серверах предпочитаемая форма ``hosts`` выглядит следующим образом:

.. code-block:: bash

   127.0.0.1 localhost
   10.0.1.2 dc-1.ald.domain.local dc-1
   # 127.0.1.1 dc-1 - данную строку нужно закомментировать или удалить, т.к. адрес локальной петли будет иметь приоритет по отношению к любому другому локальному адресу

На клиентских машинах и серверах, где нет служб, настроенных на конкретный адрес локальной сети, можно разрешать доменное имя в IP-адрес локальной петли.

.. code-block:: bash

   127.0.0.1 localhost
   127.0.1.1 pc-1.ald.domain.local pc-1

Если в ``hosts`` есть две записи для имени сервера, то при разрешении имени сервера предпочтение отдается адресу ``127.0.1.1``, так как он имеет больший приоритет. Настройки приоритетов указаны в файле ``/etc/gai.conf``.

.. code-block:: bash

   127.0.0.1 localhost
   127.0.1.1 pc-1.ald.domain.local pc-1
   10.0.1.2  pc-1.ald.domain.local pc-1